//项目URL相同部分，减轻代码量，同时方便项目迁移
//这里因为我是本地调试，所以host不规范，实际上应该是你备案的域名信息
 //var host = 'http://129.204.108.41:8080';
 var host = 'http://127.0.0.1:8080/manager';

/**
 * POST请求，
 * URL：接口
 * postData：参数，json类型
 * doSuccess：成功的回调函数
 * doFail：失败的回调函数
 *//**
 * 通用请求函数
 * @param {string} url - 接口地址
 * @param {string} method - 请求方法 ('GET' 或 'POST')
 * @param {object} postData - 请求参数，json类型 (可选)
 * @param {object} header - 请求头 (可选)
 * @param {function} doSuccess - 成功的回调函数
 * @param {function} doFail - 失败的回调函数
 */
/**
 * 高级请求函数（完整的cookie管理）
 * @param {string} url - 接口地址
 * @param {string} method - 请求方法 ('GET' 或 'POST')
 * @param {object} postData - 请求参数，json类型 (可选)
 * @param {object} header - 请求头 (可选)
 * @param {function} doSuccess - 成功的回调函数
 * @param {function} doFail - 失败的回调函数，接收错误信息参数
 */
function request(url, method, postData, header, doSuccess, doFail) {
  // 设置默认请求头
  const defaultHeader = {
    "content-type": "application/json;charset=UTF-8"
  };
  
  // 获取并处理存储的cookie
  const cookies = getCookies();
  if (cookies.length > 0) {
    defaultHeader['Cookie'] = cookies.join('; ');
  }
  
  // 合并自定义请求头和默认请求头
  const requestHeader = header ? Object.assign(defaultHeader, header) : defaultHeader;
  
  // 构造请求参数
  const requestOptions = {
    url: host + url,
    header: requestHeader,
    method: method.toUpperCase(),
    success: function (res) {
      // 处理响应中的set-cookie
      processResponseCookies(res.header);
    
      // 执行成功回调
      doSuccess(res.data);
    },
    fail: function (error) {
      if (doFail) {
        doFail(error);
      }
    }
  };
  
  // 处理POST数据
  if (method.toUpperCase() === 'POST' && postData) {
    requestOptions.data = postData;
  }
  console.log("请求地址:",requestOptions.url, "请求数据",requestOptions.data  );
  wx.request(requestOptions);
}

/**
 * 获取存储的cookies
 * @returns {Array} cookie数组
 */
function getCookies() {
  try {
    const cookieString = wx.getStorageSync('app-cookies') || '[]';
    return JSON.parse(cookieString);
  } catch (e) {
    return [];
  }
}

/**
 * 存储cookies
 * @param {Array} cookies - cookie数组
 */
function setCookies(cookies) {
  try {
    wx.setStorageSync('app-cookies', JSON.stringify(cookies));
  } catch (e) {
    console.error('存储cookie失败:', e);
  }
}

/**
 * 处理响应中的cookies
 * @param {object} responseHeaders - 响应头
 */
function processResponseCookies(responseHeaders) {
  if (!responseHeaders) return;
  
  let newCookies = [];
  const setCookieHeaders = responseHeaders['Set-Cookie'] || responseHeaders['set-cookie'];
  
  if (setCookieHeaders) {
    // 处理多个cookie的情况
    const cookieArray = Array.isArray(setCookieHeaders) ? setCookieHeaders : [setCookieHeaders];
    
    // 解析并存储cookie
    cookieArray.forEach(cookie => {
      const cookieName = cookie.split('=')[0];
      // 移除同名的旧cookie
      const existingCookies = getCookies().filter(c => !c.startsWith(cookieName + '='));
      // 添加新cookie
      newCookies = [...existingCookies, cookie];
    });
    
    setCookies(newCookies);
  }
}

/**
 * 清除所有cookies
 */
function clearAllCookies() {
  wx.removeStorageSync('app-cookies');
}

/**
 * 添加特定cookie
 * @param {string} cookie - cookie字符串
 */
function addCookie(cookie) {
  const cookies = getCookies();
  const cookieName = cookie.split('=')[0];
  const filteredCookies = cookies.filter(c => !c.startsWith(cookieName + '='));
  filteredCookies.push(cookie);
  setCookies(filteredCookies);
}
/**
 * POST请求，
 * URL：接口
 * postData：参数，json类型
 * doSuccess：成功的回调函数
 * doFail：失败的回调函数
 */
function post(url, postData, doSuccess, doFail) {
  request(url,"POST",postData,null,doSuccess,doFail); 
}

//GET请求，不需传参，直接URL调用，
function get(url, doSuccess, doFail) {
  request(url,'GET',null,null,doSuccess,doFail); 
}

/**
 * module.exports用来导出代码
 * js文件中通过var call = require("../util/request.js")  加载
 * 在引入引入文件的时候"  "里面的内容通过../../../这种类型，小程序的编译器会自动提示，因为你可能
 * 项目目录不止一级，不同的js文件对应的工具类的位置不一样
 */
module.exports.request = request;
module.exports.post = post;
module.exports.get = get;